[실기] (PART 7) SQL
NOTE
정보처리기사 실기 PART 7 — 트랜잭션 특성과 SQL(DDL/DML/DCL) 등 데이터베이스·SQL 핵심 정리.
📌 개념
- 트랜잭션 (데이터를 보장하기 위해 DBMS가 가져야하는 특성)
- 트랜잭션의 특성
- 원자성 : 연산 자체가 모두 실행 또는 모두 취소
- 일관성 : 완료 전과 완료 후가 같아야함
- 격리성 : 트랜잭션들이 서로 영향을 끼치면 안됨
- 영속성 : 영속적으로 데이터베이스에 저장
- 트랜잭션 상태 설명
- 활동 상태 : 트랜잭션 실행중
- 부분완료상태 : 마지막 명령문 실행후
- 완료상태 : 트랜잭션 성공적으로 완료
- 실패 상태 : 정상적 실행 불가
- 철회 상태 : 트랜잭션 취소되고 트랜잭션 시작 전으로 환원
- 트랜잭션 제어(TCL)
- 커밋 : 영구적 저장
- 롤백 : 저장 무효화
- 체크포인트 : 롤백을 위한 지점
- 갱신 손실 : 트랜잭션의 결과를 이후에 실행된 트랜잭션이 덮어쓸 때 문제점
- 병행제어 미보장시 문제점
- 현황 파악오류 : 트랜잭션 수행결과를 다른 트랜잭션이 참조
- 모순성 : 일관성 결여
- 연쇄 복귀 : 데이터 공유시 다른 트랜잭션이 처리한 곳의 부분처리 취소 불가
- 병행제어 기법 종류
- 로킹 : 하나의 트랜잭션이 이용시 다른 트랜잭션 동시 접근 불가
- 낙관적 검증 : 트랜잭션이 어떠한 검증도 수행 안함
- 타임 스탬프 순서 : 부여된 시간에 따라 트랜잭션 작업 수행
- 다중버전 동시성 제어 : 타임스탬프를 비교하여 직렬가능성이 보장되는 것을 선택하여 접근
- 회복 기법 종류
- REDO : 시작과 완료에 대한 기록들이 있는 트랜잭션들의 작업을 재작업하는 기법
- UNDO : 시작은 있지만 완료는 되지않는 트랜잭션을 모두 취소하는 기법
- 로그기반 회복 기법
- 지연 갱신 회복 기법 : 트랜잭션이 완료되기 전까지 데이터베이스에 기록 x
- 즉각 갱신 회복 기법 : 트랜잭션 수행중 갱신결과를 데이터베이스에 즉각 기록
- 체크 포인트 회복 기법 : 장애 발생 이전으로 복원
- 그림자 페이징 회복 기법 : 복제본을 생성하여 장애 발생시 복제본을 이용하여 회복
- DDL의 대상
- 도메인 : 원자 값들의 집합 (속성값)
- 스키마 (데이터베이스 구조, 제약조건 등을 가지고있음)
- 외부스키마 : 서브 스키마로 불림
- 개념스키마 : 전체적인 논리적 구조
- 내부스키마 : 물리적 저장장치 관점
- 테이블관련용어
- 카디널리티 : 튜플 (행)
- 차수 : 속성 (열)
- 인덱스 종류
- 순서인덱스 : B-Tree 알고리즘 사용
- 해시인덱스 : 데이터 접근 비용 균일
- 비트맵 인덱스 : 수정 변경이 적을경우 유용 (컬럼에 적은 개수가 있을 때 사용)
- 함수기반 인덱스 : 수식이나 함수를 적용하여 만듬
- 단일 인덱스 : 하나의 컬럼으로만 구성
- 결합 인덱스 : 두개 이상의 컬럼으로 구성
- 클러스터드 인덱스 : 기본키 기준으로 레코드를 묶어서 저장
- DDL 문법
- Create table 테이블명
- Alter Table 테이블명 add 컬럼명 데이터타입 [제약조건]
- Alter Table 테이블명 modify 컬럼명 데이터타입
- Alter Table 테이블명 Drop Column 컬럼명
- Drop Table 테이블명 [CasCade | Restrict]
- Truncate Table 테이블명
- View관련 DDL
- Create View 뷰이름
- Drop View 뷰이름
- INDEX관련 DDL
- Create Index 인덱스명 on 테이블명
- Alter Index 인덱스명 on 테이블명
- Drop Index 인덱스명
- DML
- Select
- Select [ALL | Distinct] 속성명 from 테이블명 [Where 조건][Group By 속성명][Having 그룹조건][Order By 속성 [ASC|DESC]
- ALL : 전부
- DISTINCT : 중복 제거
- ASC : 오름차순
- DESC : 내림차순
- Where 절 문법
-
IN() : 포함된 경우 데이터 조회
-
LIKE 패턴
- % : 0개이상
- : 1개 문자와 일치
- : 1개 문자와 불일치
- _ : 특정위치 1개와 일치
NOTE
-
- Select
ex) where 속성명 LIKE ‘[ABCD]%’; // 첫번째 문자가 A또는 B또는 C또는 D인 문자열과 일치
- Join
- 내부조인 : 공통 존재 컬럼의 값이 같은 경우 추출
- Select From 테이블1 [별칭] (Inner) join 테이블2 B On 조인조건
- 외부조인
- 왼쪽 외부 조인 : 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일 데이터 추출
- from 테이블1 [별칭] Left (outer) Join 테이블2 B On 조인조건
- 오른쪽 외부조인
- from 테이블1 [별칭] Right (outer) Join 테이블2 B On 조인조건
- 완전 외부 조인 : 양쪽 모두 추출
- from 테이블1 [별칭] Full (outer) Join 테이블2 B On 조인조건
- 교차 조인 : 조인 조건이 없는 모든 데이터 조합 추출
- 셀프 조인 : 자기자신 조인
> [!NOTE]
NULL 값도 조회 되는 것은 외부조인
- 집합연산자
- UNION : 중복 제거 합집합
- UNION ALL : 중복 허용 합집합
- INTERSECT : 교집합
- MINUS : 차집합
- INSERT
- INSERT INTO 테이블명(속성명) VALUES (값)
- insert into 테이블명 (속성1, 속성2…) values ('값1', '값2', '값3'....)
- UPDATE
- UPDATE 테이블명 SET (속성명 = 데이터) WHERE 조건
- DELETE
- DELETE FROM 테이블명 WHERE 조건
- DCL
- 권한부여
- Grant 권한 ON 테이블 TO 사용자
- ex) Grant Update ON 학생 TO 정갈산;
- 권한회수
- REVOKE 권한 ON 테이블 FROM 사용자
- ex) REVOKE UPDATE ON 학생 FROM 정갈산;
- 권한부여
-
다중 행 연산자
- IN : 리턴되는 값 중에서 해당하는 값
- select from where 속성 in (서브쿼리)
- ANY : 서브쿼리에 의해 리턴되는 값과 조건을 비교하여 하나 이상 만족
- select from where 속성 > any (서브쿼리) // 만족하는 것 중 하나 (1,2,3,4 라면 / 1 or 2 or 3 or 4 )
- ALL : 서브쿼리에 의해 리턴되는 모든 값과 조건 값을 비교하여 모든 값 만족
- select from where 속성 > ALL (서브쿼리) // 모든 내용 포함 (1,2,3,4,라면 / 1 and 2 and 3 and 4)
- EXISTS : 메인 쿼리의 비교 조건이 서브쿼리의 결과 중에서 만족하는 값 하나라도 존재
- select from where EXISTS (서브쿼리)
- IN : 리턴되는 값 중에서 해당하는 값
-
집계함수
- Count
- SUM
- AVG
- MAX
- MIN
- STDDEV : 표준편차
- VARIANCE : 분산 계산
⇒ select SUM(속성) from 테이블
-
그룹함수
- ROLLUP : 그룹별 소계값
- select ~ from 테이블 [where] Group By [속성] ROLLUP (컬럼1,컬럼2) [having] [order by]
- CUBE : 다차원 집계값
- select ~ from 테이블 [where] Group By [속성] CUBE [ 컬럼명1,…]
- grouping sets : 집계 대상 컬럼들에 대한 개별 집계
- select ~ from 테이블 [where] Group By [ 컬럼명 ] Grouping Sets [컬럼명1, …]
- ROLLUP : 그룹별 소계값
-
윈도함수 (OLAP)
-
Partition By : 순위 대상 범위 선정
- select 함수명(파라미터) OVER [partition by 컬럼1,…] [order by 컬럼 A,…] From 테이블명
-
순위함수
- rank : 동일 순위이면 동일순위 표현 , 그만큼 다음번 등수는 밀려남 (2등,2등,2등, 5등…)
- Dense_rank : 동일 순위이면 동일 순위로 표현 (2등,2등,2등,3등…)
- Row_Number : 동일 순위이어도 연속번호 부여 (2등,3등,4등,5등…)
NOTE
-
select 속성1, 속성2, RANK() OVER (Order by 속성1 DESC), DENSE_RANK() OVER (Order by 속성1 DESC), ROW_NUMBER() OVER (Order by 속성1 DESC), From 테이블;
- 절차형 SQL 종류
- 프로시저 : 일련의 쿼리를 하나의 함수처럼 작동
- 사용자 정의 함수 : 수행결과를 단일값 반환
- 트리거 : 삽입, 갱신, 삭제 이벤트가 발생할 때 실행
- 옵티마이저 : SQL 최적의 처리 (DBMS 핵심기능)
- RBO : 규칙기반 옵티마이저
- CBO : 비용기반 옵티마이저